public class PrimeNumbers {
    public static void main(String[] args) {
        int range = 20000;
        int count = 0; // 用于计数每行打印了几个素数

        System.out.println("1 ~ " + range + " 范围内的素数如下（每行5个）：");

        for (int num = 2; num <= range; num++) { // 1不是素数，从2开始
            if (isPrime(num)) {
                System.out.printf("%6d", num); // 每个数字占6个字符宽度，整齐排列
                count++;
                if (count % 5 == 0) {
                    System.out.println(); // 每5个换行
                }
            }
        }

        // 如果最后一行不足5个，也要换行
        if (count % 5 != 0) {
            System.out.println();
        }
    }

    /**
     * 判断一个数是否是素数
     * @param num 要判断的数字
     * @return true 表示是素数，false 表示不是
     */
    public static boolean isPrime(int num) {
        if (num <= 1) {
            return false;
        }
        if (num == 2) {
            return true;
        }
        if (num % 2 == 0) {
            return false;
        }
        // 只需判断到 sqrt(num)，且只需判断奇数因子
        for (int i = 3; i * i <= num; i += 2) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}